package com.hooper.executor.demo;

import java.util.concurrent.*;

/**
 * @author Tim Hooper
 * @version 1.0
 * @time 2023/03/02/22:08
 */
public class TestScheduledThreadPool {

    public static void main(String[] args) {
        ScheduledExecutorService ses = Executors.newScheduledThreadPool(2);
        //从第0秒开始，每两秒执行一次（任务开始时计时，确保间隔时间准确）
        ses.scheduleAtFixedRate(() -> System.out.println("task run at fixed rate>>>" +
                System.currentTimeMillis()), 0, 2, TimeUnit.SECONDS);
        //在添加任务后，延迟2秒后执行 （仅执行一次）
        ses.schedule(() -> System.out.println("task run with delay>>>" + System.currentTimeMillis()),
                2, TimeUnit.SECONDS);
        //在添加任务后，从第1秒开始，每2秒延迟执行一次（任务结束后开始计时）
        ses.scheduleWithFixedDelay(() -> {
                    try {
                        //由于任务需要执行一秒，实则为每3秒执行一次
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.println("task run with fixed delay>>>" + System.currentTimeMillis());
                }, 1, 2, TimeUnit.SECONDS);
    }


}
